<?php
/**
 * Curl模拟请求类
 *
 * @author Mo yi <root@imoi.cn>
 * @link   http://www.imoi.cn
 * @copyright Copyright &copy; 2010-2012 DuoLam Software LLC
 * @license http://www.imoi.cn/license/
 * @version $Id: dpCurl.php 1 2012-04-04 13:35:54Z Mo.yi $
 * @package web.helper
 * @since 1.0
 */

class dpCurl
{
	/**
	 * 保存cookie的文件名
	 */
	private $_cookieFile;

	/**
	 * 代理地址
	 */
	private $_proxy;

	/**
	 * 超时时间
	 */
	private $_expire;

	/**
     * 构造函数
     * @param string $cookieFile 保存cookie的文件名
	 * @param string $proxy      使用代理的地址
	 * @param int    $expire     超时时间，单位：秒
     */
    public function __construct($cookieFile = null, $proxy = null, $expire = 30)
	{
		$dir = APP_PATH . DS . 'runtime' . DS . 'cookie' . DS;
		is_dir($dir) or @mkdir($dir,0777,true);
		$this->_cookieFile = empty($cookieFile) ? null : $dir . $cookieFile;
		$this->_proxy      = $proxy;
		$this->_expire     = (int)$expire;
		return $this;
    }

    /**
     * 用CURL模拟获取网页页面内容
     *
     * @param string $url     所要获取内容的网址
     * @return string
     */
    public function get($url)
	{
		return $this->_run($url);
    }

    /**
     * 用CURL模拟提交数据
     *
     * @param string $url        post所要提交的网址
     * @param array  $data       所要提交的数据
     * @return string
     */
    public function post($url, array $data)
	{
		return $this->_run($url, 'post', $data);
    }

	/**
	 * curl启动运行
	 * @param string $url  目标网址
	 * @param string $type 请求方式 get || post
	 * @param array  $data post模式下，提交的数据
	 * @return string 返回所请求的内容
	 */
	private function _run($url, $type = 'get', $data = array())
	{
        if (!$url) return false;

        $ssl = substr($url, 0, 8) == 'https://' ? true : false;

        $ch = curl_init();

        if (!is_null($this->_proxy))  curl_setopt ($ch, CURLOPT_PROXY, $this->_proxy);

        curl_setopt($ch, CURLOPT_URL, $url);

        if ($ssl) {
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1);
        }

        if (!empty($this->_cookieFile)) {
			curl_setopt($ch, CURLOPT_COOKIEJAR, $this->_cookieFile);
			curl_setopt($ch, CURLOPT_COOKIEFILE, $this->_cookieFile);
		}

        curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
        curl_setopt($ch, CURLOPT_HEADER, 0);
		
		if ($type == 'post') {
			curl_setopt($ch, CURLOPT_POST, true);
			curl_setopt($ch,  CURLOPT_POSTFIELDS, $data);
		}

        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_TIMEOUT, $this->_expire);

        $content = curl_exec($ch);
        curl_close($ch);
        return $content;
	}
}

?>